package com.tfjybj.itoo.exam.provider.service;


import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.exam.entity.ExaminationEntity;
import com.tfjybj.itoo.exam.entity.ExamineeEntity;
import com.tfjybj.itoo.exam.entity.OptionEntity;
import com.tfjybj.itoo.exam.model.*;

import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.util.List;


/**
 * ExaminationService接口
 * examination表
 *
 * @author 任晓帅
 * @version 2.0.0
 * @since 2.0.0 2018-11-15 19:40:28
 */
public interface ExaminationService extends BaseServicePlus<ExaminationEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据课程id模糊查询examination
     *
     * @param courseId 课程id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的examination
     * @author 任晓帅
     * @since 2.0.0 2018-11-15 19:40:28
     */
    PageInfo<ExaminationEntity> queryByLikeCourseId(String courseId, Integer pageNo, Integer pageSize);


    List<OptionEntity> queryExamOtion(String questionId);

    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 查询所有考试课程
     *
     * @return courseName
     * @author 王雪芬
     * @since 2.0.0 2018/11/16 9:52
     */
    List<CourseScheduleModel> queryCourseName();

    /**
     * 根据课程id查询考试名称
     *
     * @param examcourseid String
     * @return ExaminationModel 考试名称
     * @author 王雪芬
     * @since 2.0.0 2018/11/16 11:54
     */
    List<ExaminationModel> queryExamName(String examcourseid);

    /**
     * 当前课程下的考试的所有考场信息
     * @author       任晓帅（改）
     * @return      ExaminationModel 考生信息
     * @param     courseId,examNameId
     * @since 2.0.0  2019年5月14日18:16:23
     */
    List<ExamRoomModel> queryExamRoomInfo(String courseId, String examNameId);

//    /**
//     * 根据考试时间查询考场
//     *
//     * @param
//     * @return ExaminationModel  时间查询考场
//     * @author 王雪芬
//     * @since 2.0.0 2018/11/16 11:54
//     */
//    List<ExaminationModel> queryExamSETime(String courseId, String examNameId);

    /**
     * 查看所有监考老师
     *
     * @param examId String
     * @return ExamineeReachClassModel  监考老师
     * @author 王雪芬
     */
    List<ExamineeReachClassModel> queryExamTearch(String examId);

    /**
     * @author maying
     * @since 2018年11月16日21:47:30
     * 导出Excel
     */
    ItooResult expotrExcel(HttpServletResponse response, String[] examId);

    /**
     * 根据教师账号查询老师分页所有考试
     *
     * @param operator 教师ID
     * @return 教师所有考试
     * @author 谢妞
     * @since 2018年12月14日19:09:12
     */
    List queryExamByTeacherId(String operator);

    /**
     * 根据教师账号查询下拉框
     *
     * @param operator 教师ID
     * @return 下拉框信息
     * @author 谢妞
     * @since 2018年12月26日19:17:53
     */
    List<ExaminationModel> queryDropDown(String operator, Integer type);

    /**
     * 组合查询，根据考试id，分类id，考试开始时间，结束时间，班级ID
     *
     * @param examId
     * @param classifyId
     * @param classId
     * @param operator
     * @return 符合条件的考试examination
     * @author 谢妞
     * @since 2018年12月14日19:14:22
     */
    List<ExaminationModel> queryCombine(String operator, String examId, String classifyId, String classId);


    /**
     * @param tableArray
     * @return 删除返回值
     * @author maying
     * @since 2018年11月17日21:50:35
     */
    ItooResult arrayDelete(List<String> tableArray);


    /**
     * 根据考试状态查询所有考试信息table表格
     *
     * @param state      状态
     * @param stateTwo   状态
     * @param operatorId 登录人id
     * @return datatable表
     * @author maying
     * @since 2018年11月18日16:00:38
     */
    List<ExaminationModel> selAllExamation(int state, Integer stateTwo, String operatorId);

    /**
     * 首页正在进行开始信息显示
     * @author 任晓帅
     * @since 2019年5月9日16:04:46
     * @param state 状态
     * @param stateTwo 状态
     * @param operatorId 登录人id
     * @return datatable表
     */
    List<ExaminationModel> selExaming(int state, Integer stateTwo, String operatorId);

    /**
     * 通过考试id查询试题存储到reids
     *
     * @param examId   考试id
     * @param operator 操作人
     * @author 王雪芬
     * @since 2.0.0 2018年11月21日16:01:32
     */
    String queryExamOnlineQuestionInfo(String examId, String operator);

    /**
     * 通过考试id和操作人查询考试信息
     *
     * @param examId   考试id
     * @param operator 操作人
     * @author 王雪芬
     * @since 2.0.0 2018年11月21日16:01:32
     */
    List<ExamOnlineinforedisModel> examOnlineInfo(String examId, String operator);

    /**
     * 通过考试id或者操作人从redis中查询试题
     *
     * @param examId 考试id
     * @author 王雪芬
     * @since 2.0.0 2018年11月21日16:01:32
     */
    String queryOnlineCourseById(String examId, String operator);

    /**
     * 根据操作人id查询今天和明天即将开始的考试
     *
     * @param operator 操作人
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日16:01:32
     */
    List<ExaminationModel> queryExamTimeInfo(String operator);

    /**
     * 添加学生
     *
     * @param examineeModel ExamineeModel
     * @return 添加的结果
     * @author maying
     * @since 2018-11-22 15:51:29
     */
    boolean insertExaminee(ExamineeModel examineeModel);


    /**
     * @param examId
     * @return 考试时长
     * @author maying
     * @since 2018-11-22 20:50:51
     */
    int selfindExamDuration(String examId);

    /**
     * 编辑提交功能
     *
     * @param examName
     * @return 编辑影响行数
     * @author maying
     * @since 2018-11-23 14:01:30
     */
    List<ExaminationEntity> editExam(String examName);


    /**
     * 查询当前考试(或者距离最近的考试)
     *
     * @return 学生信息
     * @author 王雪芬
     * @since 2018-11-23 15:51:29
     */
    ExaminationModel queryExamInfo();

    /**
     * @param examId
     * @return 删除条数
     * @author maying
     * @since 2018年11月17日21:28:38
     * 删除
     */
    ItooResult singleDelete(String examId);

    /**
     * 获取当前时间4个小时内所有的所有考试-考试预加载-王雪芬-2018年11月24日
     *
     * @return 考试
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日21:22:58
     */
    List<ExaminationModel> getExamResourse();

    /**
     * 根据考生id或学号查询当前考试信息
     *
     * @return 考试
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日21:22:58
     */
    List<ExaminationEntity> queryExamStudentExaminOnline(List<ExamineeEntity> list);

    /**
     * 根据考生id或学号查询当前考试信息
     *
     * @return 考试
     * @author 王雪芬
     * @since 2.0.0 2018年11月22日21:22:58
     */
    ExaminationEntity loginExamStudentExaminOnline(String examinationId);


    /**
     * 根据考试名称 验重
     *
     * @param examName
     * @return
     * @author maying
     * @since 2018年11月30日19:51:39
     */
    List<ExaminationEntity> selExamName(String examName);


    /**
     * 当前时间更新考试状态
     *
     * @return 是否更新成功
     * @author 王雪芬
     * @since 2018年11月30日19:51:39
     */
    int updateExamStatus();


    /**
     * 考试信息管理--考试插入
     *
     * @param examinationModel
     * @author maying
     * @since 2018-12-13 20:50:54
     */
    String saveExam(ExaminationModel examinationModel);

    /**
     * 根据考试id查询考试
     *
     * @param examinationId 考试id
     * @author 王雪芬
     * @since 2018-12-22 20:50:54
     */
    ExaminationModel queryRecoverExamination(String examinationId);

    /**
     * 根据考试时间查询
     *
     * @param examinationId
     * @return
     */
    ExaminationEntity queryExamination(String examinationId);

    /**
     * 编辑提交功能
     *
     * @return 编辑影响行数
     * @author maying
     * @since 2018-11-23 14:01:30
     */
    boolean updataExamInfomation(ExaminationModel examineeModel);

    /**
     * 根据考试id集合查询考试信息
     *
     * @param examIdList 考试id集合
     * @return List<Examination>
     * @author 马莹
     * @since 2018-12-26 19:56:37
     */
    List<ExaminationModel> selectExam(List<String> examIdList);

    /**
     * 查询当前考试-任蒙蒙-2018年12月28日
     *
     * @return String
     * @author 任蒙蒙
     */
    List<String> selectCurrentExam();

    /**
     * 查询已发布小练
     *
     * @param operator 登录id
     * @return
     * @author 魏恩君
     * @since 2.0.0 2019/1/26
     */
    List<ExaminationModel> queryReleasedPractice(String operator);

    /**
     * 更新考试状态
     *
     * @param examID 考试id
     * @return
     * @Param state 状态
     * @author 魏恩君
     * @since 2.0.0 2019/1/26
     */
    int updateExamState(String examID, String state, String classId);

    /**
     * @Description: 根据考试Id批量导出学生试卷成PDF文件接口
     * @Param: examinationId:考试id
     * @Param: examinationId:考试id
     * @Param: templateId:模板Id
     * @return: 批量导出是否成功的状态
     * @Author: 杨光彩
     * @Date: 5/10/2019
     */
    byte[] exportExamPaperToPdfByExamId(String classId, String examinationId, String examinationName, String templateId) throws FileNotFoundException;
}

